//用STL咋折腾最后一个样例都超时
//用哈希表提前开好空间+前缀和都是超时
//还得是自己离散化 + 前缀和 才够快(N*logN)
//离散化 把范围跨度很大的数组,排序去重后
//   映射到新数组 0,1,2,3,4,5,...中,映射方式:二分看它排第几个就行(logN).
#include<iostream>
#include<vector>
#include<map>
#include<unordered_map>
#include<set>
#include<algorithm>
using namespace std;
#define N 300010;
//出现过的所有下标
vector<int> scope;
//查找x在映射后的下标
int find(int x){
    int l=0,r=scope.size()-1;
    while(l<r){
        //注意边界问题
        int mid=l+r+1>>1;
        if(scope[mid]>x)
            r=mid-1;
        else
            l=mid;
    }
    return l;
}
int main(){
    int n,m;
    cin>>n>>m;
    vector<pair<int ,int >>add;
    vector<pair<int ,int >>req;
    while(n--){
        int a,b;
        cin>>a>>b;
        add.push_back({a,b});
        scope.push_back(a);
    }
    while(m--){
        int a,b;
        cin>>a>>b;
        req.push_back({a,b});
        scope.push_back(a);
        scope.push_back(b);
    }
    //排序+去重
    sort(scope.begin(),scope.end());
    scope.erase(unique(scope.begin(),scope.end()),scope.end());
    //累加
    vector<int> res(scope.size());
    for(auto& e:add){
        res[find(e.first)]+=e.second;
    }
    //前缀和
    for(int i=1;i<res.size();i++){
        res[i]+=res[i-1];
    }
    //打印结果
    for(auto& e:req){
        cout<<res[find(e.second)]-res[find(e.first)-1]<<endl;
    }
    return 0;
}